package com.glela.platform.service;

import java.util.Date;
import java.util.List;

import com.glela.platform.model.UserJournal;
import com.glela.platform.model.UserMoney;
import com.glela.platform.model.UserPromotion;
import com.glela.platform.vo.UserJournalVo;

/**
 * 用户流水账
 * 
 * @author 卫耀华
 * @date 2016-10-09
 *
 */
public interface UserJournalService {

	public int batchInsert(List<UserJournal> list);

	/**
	 * 根据用户id查询用户流水账
	 * 
	 * @param userId
	 * @param type
	 * @param page
	 * @param pageSize
	 * @return
	 */
	public List<UserJournal> getUserJournalList(long userId, int type, int page, int pageSize);

	/**
	 * 根据id查询用户流水账总数
	 * 
	 * @param userId
	 * @param type
	 * @return
	 */
	public int countUserJournal(long userId, int type);

	/**
	 * 根据用户ID获取某个用户的妆币总收入
	 * 
	 * @param userId
	 * @return
	 */
	public int getUserJournalTotalIncome(long userId);

	/**
	 * 查询我的优惠券
	 * 
	 * @param userId
	 * @param pagelimit
	 * @param pageSize
	 * @return
	 */
	public List<UserPromotion> getUserPromotionList(long userId, int pagelimit, int pageSize);

	/**
	 * 添加流水账
	 * 
	 * @author 卫耀华
	 * @date 2016-10-05
	 * 
	 * @return
	 */
	public int insertUserJournal(UserJournal userJournal);
	
	/**
	 * <dl>
	 * <dt>添加余额流水</dt>
	 * </dl>
	 * @param userJournal
	 * @return boolean
	 * @author zls
	 * @date 2017年9月5日 上午11:23:15
	 */
	public boolean insertSelective(UserJournal userJournal);

	/**
	 * @author 卫耀华
	 * @param targetSelfType 
	 * @date 2016-10-05
	 * @return
	 */
	public void insertUserPromotion(int promotionId, int promotionDetailId, int type, String promotionDetailName,
			long userId, int brandId, int goodId, int limited, int isDiscount, Integer amount, int discount,
			String effectiveTime, String expirationTime, int promotionNumber, int targetSelfType);

	/**
	 * 
	 * 修改持有优惠劵
	 * 
	 * @author 卫耀华
	 * @date 2016-10-05
	 * @param Id
	 * @return
	 */
	public void updateUserPromotionNumber(int id);

	/**
	 * 查询用户持有的优惠券总数
	 * 
	 * @param userId
	 * @return
	 */
	public int countUserPromotionByUserId(long userId);

	/**
	 * 达人收支明细（程哲权加）
	 * 
	 * @param userId
	 * @return
	 */
	public List<UserJournalVo> paymentDetails(long userId, int page, int pageSize) throws Exception;

	public int countPaymentDetails(Long userId);
	
	/** 查询我的余额 */
	public UserMoney getUserMoneyByUserIdAndType(Long userId, int type);
	
	/** 查询我的余额列表  */
	public List<UserJournal> getMyBalanceListByPage(Long userId, Date beginDate,
			Date endDate, int pageLimit, int pageSize);
	
	/** 未使用的优惠券集合 */
	public List<UserPromotion> getUserPromotionListWhichNotUsed(Long userId,
			int pageLimit, int pageSize);
	
	/** 已使用的优惠券集合 */
	public List<UserPromotion> getUserPromotionListWhichHasUsed(Long userId,
			int pageLimit, int pageSize);

	/** 已过期的优惠券集合 */
	public List<UserPromotion> getUserPromotionListWhichOverdue(Long userId,
			int pageLimit, int pageSize);
	/** 我的优惠券金额 */
	public int getUserPromotionTotalAmountWhichNotUsed(Long userId);

	/** @return UserJournal
	* @author gwq
	* @date 2017年9月8日 13:44:05
	*  */
	public UserJournal getUserJournalByBusinessTypeAndCommisionID(
			int businessTypeId, long commisionId);
	
	/**
	 * 检查近30天的在途积分事务处理行数
	 */
	public int checkOnWayAmountNear30Days(Long userId);
	
}
